GBA ARMプログラミング
レジスタ
汎用レジスタ
汎用レジスタは16個(R0〜R15)
R15
PC(プログラムカウンタ)
R14
サブルーチン・リンクレジスタ
BL命令実行時ののリターンアドレスを保持する
特殊レジスタ
CPSR
Current Program Status Register
命令
move命令(即値指定)
汎用レジスタへ即値を設定
code:arm_asm
# r1 = 0x10000000
即値の制限
任意の1バイトデータを0〜24ビットシフトさせた値である必要がある
move命令(レジスタ指定)
汎用レジスタの値を汎用レジスタへ転送
code:arm_asm
# r1 = r2
move r1, r2
ldr命令(即値指定)
メモリからレジスタへ値をロード(指定した即値はメモリ上に確保され、そのアドレスを指定して値をロードする)
code:arm_asm
# r1 = 0x12345678
ldr r1, =0x12345678
strh命令 (store half word)
下位16ビットの値をメモリ上の指定したアドレスへ書き込む
code:arm_asm
add命令
code:arm_asm
b, bne, beq
code:arm_asm
# 無限ループ
loop:
b loop
# R5が0になるまで繰り返す
loop:
bne loop
# r1 == r2 の場合、ラベルeqに飛ぶ
cmp r1, r2
beq eq
...
eq:
...
ビデオモード3
解像度
横240ドット x 縦160ドット
各ドット16ビット(2バイト)の色情報
レッド
4~0ビット
グリーン
9~5ビット
ブルー
14~10ビット
(15ビット目は未使用)
VRAM
0x06000000からの80KB
VRAMアドレスと画面上のドットのとの対応
https://gyazo.com/b5e2a90e095a4577697f6142c61c2bb5